package jp.co.nes.awssupport.business.bean;

import java.util.Map;

import jp.co.nes.awssupport.common.bean.BaseBean;

/**
 * 共通情報です。<br>
 * Lambda,batch等の引数・戻り値で使用するBeanクラスです。
 */
public class CommonInfoBean extends BaseBean {

    /** serialVersionUID */
    private static final long serialVersionUID = 1L;

    /**
     * 実行モードの定義です。
     */
    public enum RunningMode {
        /** 自動実行(同月) */
        AUTO_SAME_MONTH,

        /** 自動実行(同月と前月) */
        AUTO_SAME_MONTH_AND_LAST_MONTH,

        /** 自動実行(前月) */
        AUTO_LAST_MONTH,

        /** 手動実行 */
        MANUAL
    }

    /** 実行モード */
    private RunningMode runningMode;

    /** 処理対象年月文字列 */
    private String targetYearMonthValue;

    /** Wait時間 */
    private int waitTime = 0;

    /** その他の情報を保持するマップ */
    // 現時点(2018/02/02)では、以下の情報を設定する想定。
    //
    // 以下は、プログラムの中の判断で使用
    // ・OtherKeyForTargetYearMonthで列挙しているもののgetMapKey()の返却内容をキーにして、RunningModeに応じた処理対象年月を値に設定。
    // ・sforceUpdateLinkedAccountIdsをキーに、Sforceへ反映する連結アカウントIDを設定(複数設定する場合はカンマ区切り)
    // ・sforceDownloadWithNotCompileProgressをキーに、true or null(false)(デフォルト)を設定
    //   # trueのとき、SforceDownload処理で集計進捗状況クリア、登録処理は実施しない。
    //
    // 以下は、ステップファンクションの中の判断で使用
    // ・sforceUpdateExecをキーに、NotExec(Sforceへの反映を実施しない) or Exec(Sforceへの反映を実施)
    // ・sforceUpdateSuccessDataCleanExecをキーにNotExec(Sforceへの反映成功後、データのクリーンを実施しない) or Exec(Sforceへの反映成功後、データのクリーンを実施)
    private Map<String, String> other;

    /**
     * デフォルトコンストラクタです。
     */
    public CommonInfoBean() {
    }

    /**
     * 実行モードを返却します。
     *
     * @return 実行モード
     */
    public RunningMode getRunningMode() {
        return runningMode;
    }

    /**
     * 実行モードを設定します。
     *
     * @param runningMode 実行モード
     */
    public void setRunningMode(RunningMode runningMode) {
        this.runningMode = runningMode;
    }

    /**
     * 処理対象年月文字列を返却します。
     *
     * @return 処理対象年月文字列
     */
    public String getTargetYearMonthValue() {
        return targetYearMonthValue;
    }

    /**
     * 処理対象年月文字列を設定します。<br>
     * uuuuMM形式で設定します。
     *
     * @param targetYearMonthValue 処理対象年月文字列
     */
    public void setTargetYearMonthValue(String targetYearMonthValue) {
        this.targetYearMonthValue = targetYearMonthValue;
    }

    /**
     * Wait時間を返却します。
     *
     * @return Wait時間
     */
    public int getWaitTime() {
        return waitTime;
    }

    /**
     * Wait時間を設定します。
     *
     * @param waitTime Wait時間
     */
    public void setWaitTime(int waitTime) {
        this.waitTime = waitTime;
    }

    /**
     * その他の情報を保持するマップを返却します。
     *
     * @return その他の情報を保持するマップ
     */
    public Map<String, String> getOther() {
        return other;
    }

    /**
     * その他の情報を保持するマップを設定します。
     *
     * @param other その他の情報を保持するマップ
     */
    public void setOther(Map<String, String> other) {
        this.other = other;
    }
}
